package com.atguigu.jxc.service.impl;

import com.atguigu.jxc.dao.GoodsTypeDao;
import com.atguigu.jxc.entity.GoodsType;
import com.atguigu.jxc.entity.Log;
import com.atguigu.jxc.service.GoodsTypeService;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class GoodsTypeServiceimpl implements GoodsTypeService {

    @Autowired
    private GoodsTypeDao goodsTypeDao;

    @Override
    public String loadGoodsType() {
        return this.getAllGoodsType(-1).toString(); // 根节点默认从-1开始
    }

    /**
     * 递归查询所有商品类别
     * @return
     */
    public JsonArray getAllGoodsType(Integer parentId){

        JsonArray array = this.getGoodSTypeByParentId(parentId);

        for(int i = 0;i < array.size();i++){

            JsonObject obj = (JsonObject) array.get(i);

            if(obj.get("state").getAsString().equals("open")){// 如果是叶子节点，不再递归

                continue;

            }else{// 如果是根节点，继续递归查询

                obj.add("children", this.getAllGoodsType(obj.get("id").getAsInt()));

            }

        }

        return array;
    }

    /**
     * 根据父ID获取所有子商品类别
     * @return
     */
    public JsonArray getGoodSTypeByParentId(Integer parentId){

        JsonArray array = new JsonArray();

        List<GoodsType> goodsTypeList = goodsTypeDao.getAllGoodsTypeByParentId(parentId);

        //遍历商品类别
        for(GoodsType goodsType : goodsTypeList){

            JsonObject obj = new JsonObject();

            obj.addProperty("id", goodsType.getGoodsTypeId());//ID

            obj.addProperty("text", goodsType.getGoodsTypeName());//类别名称

            if(goodsType.getGoodsTypeState() == 1){

                obj.addProperty("state", "closed"); //根节点

            }else{

                obj.addProperty("state", "open");//叶子节点

            }

            obj.addProperty("iconCls", "goods-type");//图标默认为自定义的商品类别图标

            JsonObject attributes = new JsonObject(); //扩展属性

            attributes.addProperty("state", goodsType.getGoodsTypeState());//就加入当前节点的类型

            obj.add("attributes", attributes);

            array.add(obj);

        }

        return array;
    }
}
